In [1]:
import numpy as np
import pandas as pd
import holoviews as hv
from holoviews import dim, opts

hv.extension('bokeh')
In [2]:
import math as mt
from scipy import stats
import matplotlib.pyplot as plt
from datetime import date, timedelta
import calendar
import statsmodels.api as sm
import warnings
import collections
from mpl_toolkits.basemap import Basemap
from ipywidgets import widgets
import folium
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
import math as mt
from matplotlib import colors
from colour import Color
from matplotlib.colors import LinearSegmentedColormap
In [67]:
def Mapp(Time,F):
    
    print(conclusions[0][conclusions[0]['data_trig'] == Time].data_pick.values[0])
      
    fig = plt.figure(figsize=(20,15))
    plt.figure(0)
    
    color_1 = 'blue'
    color_2 = 'red'
    color_1 = Color(color_1)
    color_2 = Color(color_2)
    grad = list(color_1.range_to(color_2, int(M+1)))

    # Colorbar.
    trips_values = list(range(0, int(M)))
    colorbar = np.array([[tuple([int(round(j*255, 0)) for j in grad[int(i)].rgb]) for i in trips_values] for _ in range(100)])
    plt.imshow(colorbar)
    plt.yticks([])
    ticks = list(range(len(trips_values)))
    plt.xticks(ticks=ticks[::200] + [ticks[-1]], labels=trips_values[::200] + [trips_values[-1]])
    plt.title('Количество поездок в час', y=1.01, fontsize=20)
    plt.show()
        
    plt.figure(1)
    fig = plt.figure(figsize=(25,25))
                
    ax1 = plt.subplot2grid((1,2), (0,0))
    ax2 = plt.subplot2grid((1,2), (0,1))
                
    m_1 = Basemap(llcrnrlon=-74.25559,llcrnrlat=40.49612,urcrnrlon=-73.70001,urcrnrlat=40.91553,
             resolution='h', projection='cyl', lat_0 = 40.748306, lon_0 = -73.985756, ax=ax1)
    m_1.drawcoastlines()
    m_1.drawcountries()
                
    temp_data_1 = conclusions[0][conclusions[0]['data_trig'] == Time][['passenger_count','west','east','south','north']]
    
    for i in range(102):
    
        patches = []
        homeplate = np.array(pp(temp_data_1.values[i])[0])
        k = pp(temp_data_1.values[i])[1]
        fillcolor = grad[int(k+1)].hex_l
        patches.append(Polygon(homeplate))
        ax1.add_collection(PatchCollection(patches, facecolor=fillcolor))            
                
    ax1.set_title("Actual")
                
# ------------------------------------------------------------------------------------------------------------------------
    
    m_2 = Basemap(llcrnrlon=-74.25559,llcrnrlat=40.49612,urcrnrlon=-73.70001,urcrnrlat=40.91553,
             resolution='h', projection='cyl', lat_0 = 40.748306, lon_0 = -73.985756, ax=ax2)
    m_2.drawcoastlines()
    m_2.drawcountries()
                
    temp_data_2 = conclusions[0][conclusions[0]['data_trig'] == Time+F][['Predictions_3','west','east','south','north']]
    
    for i in range(102):
    
        patches = []
        homeplate = np.array(pp(temp_data_2.values[i])[0])
        k = pp(temp_data_2.values[i])[1]
        fillcolor = grad[int(k+1)].hex_l
        patches.append(Polygon(homeplate))
        ax2.add_collection(PatchCollection(patches, facecolor=fillcolor))            
    
    strok = 'Forecast in '+str(F)+' hour(s)'
    ax2.set_title(strok)
    
    plt.show()
In [4]:
file_obj = open('Chosen_2_week.txt','r')
regions = file_obj.read()
regions = regions.split(',')
regions = list(map(int,regions))
data_im = pd.read_csv('regions.csv',header = 0,sep = ';')

conclusions = [pd.DataFrame(),pd.DataFrame(),pd.DataFrame(),pd.DataFrame(),pd.DataFrame(),pd.DataFrame()]

for i in range(6):
    strok_2 = 'conclusions_'+str(i)+'.csv'
    conclusions[i] = pd.read_csv(strok_2,sep = '\t',header = 0)
    
for i in range(6):
    conclusions[i] = pd.merge(conclusions[i],data_im,how='left',on='region')
    print(i)
    
Timeline= list(conclusions[0][conclusions[0]['region'] == 1075].data_pick.values)
M = max(conclusions[0].passenger_count.values)
def pp(m1):
    m = m1
    path = []
    path.append([m[1],m[3]])
    path.append([m[1],m[4]])
    path.append([m[2],m[4]])
    path.append([m[2],m[3]])
    #path.append([m[0],m[2]])    
    return np.array(path), m1[0]

def pp_new(m1):
    m = m1[1:]
    path = []
    path.append((m[2],m[1]))
    path.append((m[3],m[0]))
    path.append((m[3],m[1]))
    path.append((m[2],m[1]))
    #path.append([m[0],m[2]])    
    return np.array(path)
0
1
2
3
4
5
In [21]:
for i in range(6):
    conclusions[i]['Shift'] = [i+1]*len(conclusions[i])
    print(i)

frames = [conclusions[0],conclusions[1],conclusions[2],conclusions[3],conclusions[4],conclusions[5]]
data = pd.concat(frames)
print(len(data))
0
1
2
3
4
5
440640

Предсказание со сдвигом на ... часов (Shift)

In [65]:
macro_df = data
key_dimensions   = [('data_trig','data_trig'),('region', 'Region'),('Shift','Shift')]
value_dimensions = [('passenger_count','passenger_count'),('Predictions_3','Predictions_3')]
macro = hv.Table(macro_df, key_dimensions, value_dimensions)
gdp_curves_real = macro.to.curve('data_trig', 'passenger_count',label='Actual')
gdp_curves_forecast = macro.to.curve('data_trig', 'Predictions_3',label='Forecast')
In [66]:
hv.output(max_frames=1000)
overlay = gdp_curves_real * gdp_curves_forecast
overlay.opts(
    opts.Curve(selection_line_color='k'), 
    opts.Text(text_font_size='13px'),
    opts.Overlay(height=400, show_frame=False, width=700))

overlay.relabel("Actual VS Forecast")
Out[66]:

Интерактивная карта

In [68]:
w = widgets.interactive(Mapp, Time=(2904,3623,1), F=(0,6,1))
display(w)
In [ ]: